#pragma once

#include <algorithm/analytical_model/algorithm/cuda/inter_op/Data.h>
#include <utils/config.h>

#include <tuple>

#include <thrust/system/cuda/future.h>

namespace solar::cuda::metrics
{
    auto RAD(FUNC_CONST_INPUT float* d_input, FUNC_CONST_INPUT float* d_ground_truth,
             const inter_op::Int2& resolution, const cudaStream_t stream = nullptr) -> float;

    namespace async
    {
        auto RAD(FUNC_CONST_INPUT float* d_input, FUNC_CONST_INPUT float* d_ground_truth,
                 const inter_op::Int2& resolution, const cudaStream_t stream = nullptr)
            -> std::tuple<thrust::cuda::unique_eager_future<float>, thrust::cuda::unique_eager_future<float>>;
    }

} // namespace solar::cuda::metrics
